def greet(name):
    print(f"Hello, {name}!")

def universal_decorator(func):
    def wrapper(*args,**kwargs):
        print("装饰器开始")
        result = func(*args,**kwargs)
        print("装饰器结束")
        return result
    return wrapper

greet = universal_decorator(greet)
greet("Allen")

from datetime import datetime

def run_time(func):
    def new_func(n):
        start = datetime.now()
        print(f"开始的时间{start}")
        func(n)
        end = datetime.now()
        print(f"结束的时间{end}")
        print(f"花费的时间{end - start}")
    return new_func

@run_time
def for1(n):
    total = 0
    for i in range(1,n+1):
        total += i
        print(f"1到{n}的和：{total}")

for1(1000)



from datetime import datetime
# 定义计时器装饰器函数，接收一个函数作为参数
def timer(func):
    # 定义包装函数，*args和**kwargs用于接收原函数的任意参数
    def wrapper(*args, **kwargs):
        # 记录函数执行前的时间（开始时间）
        start = datetime.now()

        # 调用原函数，并将接收的参数传递给原函数，保存返回结果
        result = func(*args, **kwargs)

        # 记录函数执行后的时间（结束时间）
        end = datetime.now()

        # 计算并打印函数执行耗时，func.__name__用于获取原函数的名称
        print(f"{func.__name__}耗时：{end - start}")

        # 返回原函数的执行结果，保证装饰器不改变原函数的返回值
        return result

    # 返回包装后的函数
    return wrapper


# 使用@语法将timer装饰器应用到shopping函数
@timer
def shopping(items):
    # 模拟购物过程：遍历商品列表
    for item in items:
        pass
    # 打印购物完成信息
    print("购物完成")


# 调用被装饰后的shopping函数，传入商品列表
# 注意：修正了原代码中的引号混用问题（中文引号改为英文引号）
shopping(['牛奶', '面包'])



from datetime import datetime
import functools
@functools.lru_cache(maxsize=128)
def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n - 1)
def log_and_time(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print(f"【调用】{func.__name__}({args}, {kwargs})")
        start = datetime.now()
        result = func(*args, **kwargs)
        end = datetime.now()
        print(f"【返回】{result} | 耗时: {end - start}")
        return result
    return wrapper
def make_multiplier(factor):
    def multiplier(x):
        return x * factor
    return multiplier
data = [
    {'name': 'A', 'value': 10},
    {'name': 'B', 'value': 5},
    {'name': 'C', 'value': 15},
]
if __name__ == "__main__":
    safe_factorial = log_and_time(factorial)
    print("5! =", safe_factorial(5))
    double = make_multiplier(2)
    triple = make_multiplier(3)
    print("double(4) =", double(4))    # 8
    print("triple(4) =", triple(4))    # 12
    sorted_data = sorted(data, key=lambda d: d['value'], reverse=True)
    print("按 value 降序:", [d['name'] for d in sorted_data])




